%%
%% This is file `nameref.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% nameref.dtx  (with options: `package')
%% 
%% File: nameref.dtx
%% Copyright (C) 1995-1999 Sebastian Rahtz
%%               2000 Sebastian Rahtz, Heiko Oberdiek
%%               2001-2010 Heiko Oberdiek
%%
%% This file is part of the `Hyperref Bundle'.
%% -------------------------------------------
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% The Current Maintainer of this work is Heiko Oberdiek.
%%
%% The list of all files belonging to the `Hyperref Bundle' is
%% given in the file `manifest.txt'.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{nameref}
  [2010/04/30 v2.40 Cross-referencing by name of section]%
\RequirePackage{refcount}[2006/02/12]
\RequirePackage{gettitlestring}[2009/12/18]
\RequirePackage{ltxcmds}[2009/12/12]
\def\strip@period#1.\relax#2\@@@{#1}
\newif\ifNR@showkeys
\NR@showkeysfalse
\@ifpackageloaded{showkeys}{%
  \begingroup
    \@ifundefined{SK@@label}{%
    }{%
      \global\NR@showkeystrue
    }%
  \endgroup
}{}
\def\label#1{%
  \@bsphack
  \begingroup
    \@onelevel@sanitize\@currentlabelname
    \edef\@currentlabelname{%
      \expandafter\strip@period\@currentlabelname\relax.\relax\@@@%
    }%
    \protected@write\@auxout{}{%
      \string\newlabel{#1}{%
        {\@currentlabel}%
        {\thepage}%
        {\@currentlabelname}%
        {\@currentHref}{}%
      }%
    }%
  \endgroup
  \@esphack
}%
\ifNR@showkeys
  \def\label#1{%
    \@bsphack
    \SK@\SK@@label{#1}%
    \begingroup
      \@onelevel@sanitize\@currentlabelname
      \edef\@currentlabelname{%
        \expandafter\strip@period\@currentlabelname\relax.\relax\@@@%
      }%
      \protected@write\@auxout{}{%
        \string\newlabel{#1}{%
          {\@currentlabel}%
          {\thepage}%
          {\@currentlabelname}%
          {\@currentHref}{}%
        }%
      }%
    \endgroup
    \@esphack
  }%
\fi
\let\ltx@label\label
\@ifundefined{slabel}{}{%
  \def\slabel#1{%
    \@bsphack
    \if@filesw
      {%
        \@onelevel@sanitize\@currentlabelname
        \edef\@currentlabelname{%
          \expandafter\strip@period\@currentlabelname\relax.\relax\@@@%
        }%
        \let\thepage\relax
        \def\protect{\noexpand\noexpand\noexpand}%
        \edef\@tempa{%
          \write\@auxout{%
            \string\newlabel{#1}{%
              {\thesubequation}%
              {\thepage}%
              {\@currentlabelname}%
              {\@currentHref}{}%
            }%
          }%
        }%
        \expandafter
      }%
      \@tempa
      \if@nobreak\ifvmode\nobreak\fi\fi
    \fi
    \@esphack
  }%
}
\def\@writetocindents@{%
  \begingroup
  \@for\@tempa:=-1,0,1,2,3\do{%
    \immediate\write\@auxout{%
      \string\newlabel{tocindent\@tempa}{%
        \csname r@tocindent\@tempa\endcsname{}{}{}{}%
      }%
    }%
  }%
  \endgroup
}
\def\NR@gettitle#1{%
  \GetTitleString{#1}%
  \let\@currentlabelname\GetTitleStringResult
}
\let\NR@sect\@sect
\newcounter{section@level}
\def\@sect#1#2#3#4#5#6[#7]#8{%
  \setcounter{section@level}{#2}%
  \NR@gettitle{#7}%
  \NR@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{\Sectionformat{#8}{#2}}%
}
\let\NR@ssect\@ssect
\def\@ssect#1#2#3#4#5{%
  \NR@gettitle{#5}%
  \NR@ssect{#1}{#2}{#3}{#4}{\Sectionformat{#5}{#1}}%
}
\ltx@IfUndefined{ifheadnameref}{%
}{%
  \ltx@IfUndefined{M@sect}{%
  }{%
    \let\NRorg@M@sect\M@sect
    \def\M@sect#1#2#3#4#5#6[#7][#8]{%
      \ifheadnameref
        \NR@gettitle{#8}%
      \else
        \NR@gettitle{#7}%
      \fi
      \NRorg@M@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}][{#8}]%
    }%
  }%
}
\let\NR@part\@part
\long\def\@part[#1]#2{%
  \NR@gettitle{#1}%
  \NR@part[{#1}]{#2}%
}
\let\NR@spart\@spart
\long\def\@spart#1{%
  \NR@gettitle{#1}%
  \NR@spart{#1}%
}
\let\NR@chapter\@chapter
\def\@chapter[#1]#2{%
  \NR@gettitle{#1}%
  \NR@chapter[{#1}]{#2}%
}
\@ifclassloaded{memoir}{%
  \ltx@IfUndefined{ifheadnameref}{%
  }{%
    \def\@chapter[#1]#2{%
      \ltx@IfUndefined{ch@pt@c}{%
        \NR@gettitle{#1}%
      }{%
        \ifx\ch@pt@c\ltx@empty
          \NR@gettitle{#2}%
        \else
          \def\NR@temp{#1}%
          \ifx\NR@temp\ltx@empty
            \expandafter\NR@gettitle\expandafter{\ch@pt@c}%
          \else
            \ifheadnameref
              \NR@gettitle{#1}%
            \else
              \expandafter\NR@gettitle\expandafter{\ch@pt@c}%
            \fi
          \fi
        \fi
      }%
      \NR@chapter[{#1}]{#2}%
    }%
  }%
}{}
\let\NR@schapter\@schapter
\def\@schapter#1{%
  \NR@gettitle{#1}%
  \NR@schapter{#1}%
}
\AtBeginDocument{%
  \@ifpackageloaded{hyperref}{%
    \@ifpackagelater{hyperref}{2009/12/05}\@gobble\@firstofone
  }\@firstofone
  {%
    \let\NR@@caption\@caption
    \long\def\@caption#1[#2]{%
      \NR@gettitle{#2}%
      \NR@@caption{#1}[{#2}]%
    }%
  }%
  \@ifpackageloaded{longtable}{%
    \let\NRorg@LT@c@ption\LT@c@ption
    \def\LT@c@ption#1[#2]#3{%
      \NRorg@LT@c@ption{#1}[{#2}]{#3}%
      \def\@tempa{#2}%
      \ifx\@tempa\@empty
      \else
        \NR@gettitle{#2}%
      \fi
    }%
  }{}%
  \ltx@IfUndefined{descriptionlabel}{%
  }{%
    \let\NRorg@descriptionlabel\descriptionlabel
    \def\descriptionlabel#1{%
      \NR@gettitle{#1}%
      \NRorg@descriptionlabel{#1}%
    }%
  }%
}
\AtBeginDocument{%
  \@ifpackageloaded{titlesec}{%
    \let\NRorg@ttl@sect@i\ttl@sect@i
    \def\ttl@sect@i#1#2[#3]#4{%
      \NR@gettitle{#4}%
      \NRorg@ttl@sect@i{#1}{#2}[{#3}]{#4}%
    }%
  }{}%
}
\@ifclassloaded{beamer}{%
  \def\NR@PatchBeamer#1{%
    \expandafter\let\csname NRorg@beamer@#1\expandafter\endcsname
                    \csname beamer@#1\endcsname
    \begingroup
      \edef\x{\endgroup
        \long\def\expandafter\noexpand\csname beamer@#1\endcsname
            [####1]{% hash-ok
          \noexpand\NR@gettitle{####1}%
          \expandafter\noexpand\csname NRorg@beamer@#1\endcsname
          [{####1}]%
        }%
      }%
    \x
  }%
  \NR@PatchBeamer{section}%
  \NR@PatchBeamer{subsection}%
  \NR@PatchBeamer{subsubsection}%
}{}
\ltx@IfUndefined{@opargbegintheorem}{}{%
  \let\NRorg@opargbegintheorem\@opargbegintheorem
  \def\@opargbegintheorem#1#2#3{%
    \NR@gettitle{#3}%
    \NRorg@opargbegintheorem{#1}{#2}{#3}%
  }%
}
\AtBeginDocument{%
  \@ifpackageloaded{amsthm}{%
    \let\NRorg@begintheorem\@begintheorem
    \begingroup
      \edef\x{macro:\string#1\string#2[\string#3]}%
      \@onelevel@sanitize\x
      \def\y#1->#2\@nil{#1}%
      \edef\z{\expandafter\y\meaning\@begintheorem->\@nil}%
      \@onelevel@sanitize\z
    \expandafter\endgroup
    \ifx\x\z
      \def\@begintheorem#1#2[#3]{%
        \NR@gettitle{#3}%
        \NRorg@begintheorem{#1}{#2}[{#3}]%
      }%
    \fi
  }{}%
}
\providecommand*{\@currentlabelname}{}
\providecommand*{\@currentHref}{}
\long\def\@firstoffive#1#2#3#4#5{#1}
\long\def\@secondoffive#1#2#3#4#5{#2}
\long\def\@thirdoffive#1#2#3#4#5{#3}
\long\def\@fourthoffive#1#2#3#4#5{#4}
\long\def\@fifthoffive#1#2#3#4#5{#5}
\providecommand*\@safe@activestrue{}%
\providecommand*\@safe@activesfalse{}%
\def\NR@setref#1{%
  \begingroup
    \@safe@activestrue
    \expandafter
  \endgroup
  \expandafter\NR@@setref\csname r@#1\endcsname
}
\def\NR@@setref#1{%
  \ifx\@undefined#1%
    \let#1\relax
  \fi
  \@setref#1%
}
\def\T@ref#1{%
  \NR@setref{#1}\@firstoffive{#1}%
}%
\def\T@pageref#1{%
  \NR@setref{#1}\@secondoffive{#1}%
}%
\ifNR@showkeys
  \ifx\SK@ref\@empty
  \else
    \def\T@ref#1{%
      \@safe@activestrue
      \SK@\SK@@ref{#1}%
      \@safe@activesfalse
      \NR@setref{#1}\@firstoffive{#1}%
    }%
    \def\T@pageref#1{%
      \@safe@activestrue
      \SK@\SK@@ref{#1}%
      \@safe@activesfalse
      \NR@setref{#1}\@secondoffive{#1}%
    }%
  \fi
\fi
\@ifpackageloaded{hyperref}{%
}{%
  \DeclareRobustCommand{\ref}{\T@ref}%
  \DeclareRobustCommand{\pageref}{\T@pageref}%
}
\def\T@nameref#1{%
  \begingroup
    \let\label\@gobble
    \NR@setref{#1}\@thirdoffive{#1}%
  \endgroup
}%
\ifNR@showkeys
  \ifx\SK@ref\@empty
  \else
    \def\T@nameref#1{%
      \@safe@activestrue
      \SK@\SK@@ref{#1}%
      \@safe@activesfalse
      \begingroup
        \let\label\@gobble
        \NR@setref{#1}\@thirdoffive{#1}%
      \endgroup
    }%
  \fi
\fi
  \DeclareRobustCommand*{\nameref}{%
    \@ifstar\T@nameref\T@nameref
  }%
\def\Nameref#1{`\nameref{#1}' on page~\pageref{#1}}
\providecommand\Sectionformat[2]{#1}
\@ifpackageloaded{ifthen}{%
  \let\NROrg@ifthenelse\ifthenelse
  \def\ifthenelse{%
    \let\begingroup\NR@TE@begingroup
    \NROrg@ifthenelse
  }%
  \let\NROrg@begingroup\begingroup
  \def\NR@TE@begingroup{%
    \let\begingroup\NROrg@begingroup
    \begingroup
    \def\ref##1{\getrefbykeydefault{##1}{}{??}}%
    \def\pageref##1{\getrefbykeydefault{##1}{page}{0}}%
  }%
}{}
\AtBeginDocument{%
  \ifx\csname @@vpageref\endcsname\relax
  \else
    \def\@@vpageref#1[#2]#3{%
      \begingroup
        \csname @safe@activestrue\endcsname
        \edef\x{#3}%
        \@onelevel@sanitize\x
        \toks@{%
          \NR@@vpageref{#1}[{#2}]%
        }%
        \edef\x{\endgroup
          \the\toks@{\x}%
        }%
      \x
    }%
    \def\NR@@vpageref#1[#2]#3{%
      \leavevmode\unskip
      \global\advance\c@vrcnt\@ne
      \@ifundefined{r@\the\c@vrcnt @vr}%
        {\@namedef{r@\the\c@vrcnt @vr}{{??}{??}{}{}{}}}{}%
      \edef\@tempa{%
        \expandafter\expandafter\expandafter
        \@secondoffive\csname r@\the\c@vrcnt @vr\endcsname
      }%
      \@ifundefined{r@\the\c@vrcnt @xvr}%
        {\@namedef{r@\the\c@vrcnt @xvr}{{??}{??}{}{}{}}}{}%
      \edef\@tempb{%
        \expandafter\expandafter\expandafter
        \@secondoffive\csname r@\the\c@vrcnt @xvr\endcsname
      }%
      {%
        \let\@currentlabel\@empty
        \expandafter\label\expandafter{\the\c@vrcnt @xvr}%
      }%
      \ifx\@tempa\@tempb
      \else
        \vref@err{%
          \noexpand\vref at page boundary %
          \@tempb-\@tempa\space (may loop)%
        }%
      \fi
      \@ifundefined{r@#3}{\@namedef{r@#3}{{??}{??}{}{}{}}}{}%
      \edef\thevpagerefnum{%
        \expandafter\expandafter\expandafter
        \@secondoffive\csname r@#3\endcsname
      }%
      \ifx\vref@space\@undefined
        \space
      \else
        \vref@space
      \fi
      \ifx\@tempa\thevpagerefnum
        #1%
      \else
        #2%
        \is@pos@number\thevpagerefnum{%
          \is@pos@number\@tempa{%
            \@tempcnta\@tempa
            \advance\@tempcnta\@ne
          }{%
            \@tempcnta\maxdimen
          }%
          \ifnum \thevpagerefnum =\@tempcnta
            \ifodd\@tempcnta
              \if@twoside
                \reftextfaceafter
              \else
                \reftextafter
              \fi
            \else
              \reftextafter
            \fi
          \else
            \advance\@tempcnta-2 %
            \ifnum \thevpagerefnum =\@tempcnta
              \ifodd\@tempcnta
                \reftextbefore
              \else
                \if@twoside
                  \reftextfacebefore
                \else
                  \reftextbefore
                \fi
              \fi
            \else
              \reftextfaraway{#3}%
            \fi
          \fi
        }{%
          \reftextfaraway{#3}%
        }%
      \fi
      {%
        \let\@currentlabel\@empty
        \expandafter\label\expandafter{\the\c@vrcnt @vr}%
      }%
    }%
    \DeclareRobustCommand\vnameref[1]{%
      \unskip~\nameref{#1}%
      \@vpageref[\unskip]{#1}%
    }%
  \fi
}
\@ifundefined{@Refstar}{%
  \def\T@Ref#1{%
    \NR@setref{#1}\NR@MakeUppercaseFirstOfFive{#1}%
  }%
  \def\NR@MakeUppercaseFirstOfFive#1#2#3#4#5{%
    \MakeUppercase#1%
  }%
}{}%
\AtBeginDocument{%
  \@ifpackageloaded{varioref}{%
    \@ifundefined{@Refstar}{%
      \DeclareRobustCommand*{\Ref}[1]{%
        \T@Ref{#1}%
      }%
    }{}%
  }{}%
}%
\AtBeginDocument{%
  \@ifpackageloaded{listings}{%
    \let\NROrg@lst@MakeCaption\lst@MakeCaption
    \def\lst@MakeCaption{%
      \ifx\lst@label\@empty
      \else
        \let\@currentlabelname\lst@@caption
      \fi
      \NROrg@lst@MakeCaption
    }%
  }{}%
}
\endinput
%%
%% End of file `nameref.sty'.
